博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分页技巧_实现第一个分页功能(回复列表中的分页)
阅读量:6324 次
发布时间:2019-06-22

本文共 10014 字,大约阅读时间需要 33 分钟。

分页技巧_实现第一个分页功能(回复列表中的分页)

========================================

假设共25条数据,每页显示10条,则共3页

    first   max

---------------------------------

第1页  0     10

第2页  10    10

第3页  20    10

first = (pageNum - 1) * pageSize(当前页-1)* 10

max = pageSize每页显示几条 最多获取几条 不够剩余的都给它

TopicAction.java

@Controller@Scope("prototype")public class TopicAction extends BaseAction
{ private Long forumId; //并提供getset方法,方便准备分页信息 private int pageNum = 1; //当前页,默认第一页 private int pageSize = 10; //每页显示多少条记录,每页显示10条 /** 显示单个主题(主帖+回帖列表) */ public String show() { // 准备数据:topic Topic topic = topicService.getById(model.getId()); ActionContext.getContext().put("topic", topic); //准备数据:replyList// List
replyList = replyService.findByTopic(topic);// ActionContext.getContext().put("replyList", replyList); //准备分页信息 PageBean pageBean =replyService.getPageBeanByTopic(pageNum, pageSize, topic);//分页信息找service查询 ActionContext.getContext().getValueStack().push(pageBean);//放在栈顶 return "show"; } /** 发表新主题页面 */ public String addUI() { //准备数据 Forum forum = forumService.getById(forumId); ActionContext.getContext().put("forum", forum); return "addUI"; } /** 发表新主题 */ public String add() { //封装 // >>表单参数,已经封装了title,content //model.setTitle(title); //model.setContent(content); model.setForum(forumService.getById(forumId)); // >>当前直接获取的信息 model.setAuthor(getCurrentUser());//当前登录用户 model.setIpAddr(ServletActionContext.getRequest().getRemoteAddr());//当前请求中的ip model.setPostTime(new Date());//当前时间 topicService.save(model); return "toShow";//转到新主题的显示页面 } public Long getForumId() { return forumId; } public void setForumId(Long forumId) { this.forumId = forumId; } public int getPageNum() { return pageNum; } public void setPageNum(int pageNum) { this.pageNum = pageNum; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; }}

ReplyService.java

public interface ReplyService extends DaoSupport
{ /** * 查询指定主题中所有的回复列表,排序:按发表时间升序排序 * @param topic * @return */ List
findByTopic(Topic topic); /** * 查询分页信息 * @param pageNum * @param pageSize * @param topic * @return */ PageBean getPageBeanByTopic(int pageNum, int pageSize, Topic topic);}

ReplyServiceImpl.java

@Service@Transactional@SuppressWarnings("unchecked")public class ReplyServiceImpl extends DaoSupportImpl
implements ReplyService{ public List
findByTopic(Topic topic) {
//当前主题所有的回复列表 return getSession().createQuery(// "FROM Reply r WHERE r.topic=? ORDER BY r.postTime ASC")// .setParameter(0, topic)// .list(); } @Override public void save(Reply reply) { //1.保存 getSession().save(reply); //2.维护相关的信息 Topic topic = reply.getTopic(); Forum forum = topic.getForum(); forum.setArticleCount(forum.getArticleCount() + 1); //文章数量(主题数+回复数) topic.setReplyCount(topic.getReplyCount() + 1); //回复数量 topic.setLastReply(reply); //最后发表的时间 topic.setLastUpdateTime(reply.getPostTime());//最后更新的时间(主题的发表时间) getSession().update(topic); getSession().update(forum); } public PageBean getPageBeanByTopic(int pageNum, int pageSize, Topic topic) { //查询本页的数据列表 List list = getSession().createQuery( "FROM Reply r WHERE r.topic=? ORDER BY r.postTime ASC")// .setParameter(0, topic)// .setFirstResult((pageNum - 1) * pageSize)// .setMaxResults(pageSize)// .list(); //查询总记录数量 Long count = (Long)getSession().createQuery(// "SELECT COUNT(*) FROM Reply r WHERE r.topic=?")// .setParameter(0, topic)// .uniqueResult(); return new PageBean(pageNum, pageSize, count.intValue(), list); }}

PageBean.java

/** * 分页功能中的一页的信息 * @author yejin * */public class PageBean {        //指定的或是页面参数    private int currentPage;    // 当前页    private int pageSize;        // 每页显示多少条        //查询数据库    private int recordCount;    // 总记录数    private List recordList;    // 本页的数据列表        //计算    private int pageCount;        // 总页数    private int beginPageIndex;    // 页码列表的开始索引(包含)    private int endPageIndex;    // 页码列表的结束索引(包含)        /**     * 只接受前四个必要的属性,会自动的计算出其他3个属性的值     * @param currentPage    当前页     * @param pageSize        每页显示多少条     * @param recordCount    总记录数     * @param recordList    本页的数据列表     */    public PageBean(int currentPage, int pageSize, int recordCount, List recordList) {        this.currentPage = currentPage;        this.pageSize = pageSize;        this.recordCount = recordCount;        this.recordList = recordList;                //只接受前四个必要的属性,会自动的计算出其他3个属性的值        //计算总页码        pageCount = (recordCount + pageSize - 1) / pageSize;                //计算beginPageIndex 和 endPageIndex        // >> 总页数不多于10页,则全部显示        if(pageCount <= 10) {            beginPageIndex = 1;            endPageIndex = pageCount;        }        // >> 总页数多于10页,则显示当前页附近的10个页码        else{            //当前页附近的10个页码(前4个 + 当前页 + 后5个)            beginPageIndex = currentPage - 4;            endPageIndex = currentPage + 5;            //当前面的页码不足4个时,则显示前10个页码            if(beginPageIndex < 1) {                beginPageIndex = 1;                endPageIndex = 10;            }            //当后面的页码不足5个时,则显示后10个页码            if(endPageIndex > pageCount) {                endPageIndex = pageCount;                beginPageIndex = pageCount - 10 + 1;            }        }    }        public List getRecordList() {        return recordList;    }    public void setRecordList(List recordList) {        this.recordList = recordList;    }    public int getCurrentPage() {        return currentPage;    }    public void setCurrentPage(int currentPage) {        this.currentPage = currentPage;    }    public int getPageCount() {        return pageCount;    }    public void setPageCount(int pageCount) {        this.pageCount = pageCount;    }    public int getPageSize() {        return pageSize;    }    public void setPageSize(int pageSize) {        this.pageSize = pageSize;    }    public int getRecordCount() {        return recordCount;    }    public void setRecordCount(int recordCount) {        this.recordCount = recordCount;    }    public int getBeginPageIndex() {        return beginPageIndex;    }    public void setBeginPageIndex(int beginPageIndex) {        this.beginPageIndex = beginPageIndex;    }    public int getEndPageIndex() {        return endPageIndex;    }    public void setEndPageIndex(int endPageIndex) {        this.endPageIndex = endPageIndex;    }}

topicAction >>show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>    查看主题:${topic.title}    <%@ include file="/WEB-INF/jsp/public/commons.jspf" %>    
查看主题
>
论坛
>
${topic.forum.name}
>> 帖子阅读
  本帖主题:${topic.title}
回复
移动到其他版块 精华 置顶 普通
 
${topic.author.name}
${topic.content}
${author.name}
${content}
页次:${currentPage}/${pageCount}页   每页显示:${pageSize}条   总记录数:${recordCount}条
<%--当前页 --%>
${num}
<%--非当前页 --%>
${num}
转到:
  快速回复  
标题
内容
说明:
1,主帖只在第一页显示。
2,只有是管理员才可以进行“移动”、“编辑”、“删除”、“精华”、“置顶”的操作。
3,删除主帖,就会删除所有的跟帖(回复)。

==============================

FROM     必须

  实体名

WHERE    可选

  条件1 AND 条件2 AND ... 条件n

ORDER BY   可选

  属性1, 属性2, ... 属性n

==============================

QueryHelper

  用于辅助拼接HQL语句

  addCondition("t.type=?", "精华");

  d.id BETWEEN ? AND ?

  d.parent=?

  d.parent IS NULL

 

转载于:https://www.cnblogs.com/justdoitba/p/7965566.html

你可能感兴趣的文章
win7操作系统双击我的电脑提示服务器运行失败
查看>>
nginx conf
查看>>
composer install 为什么这么慢?
查看>>
composer之创建自己的包
查看>>
eclipse + maven +tomcat server 常见问题
查看>>
Grails示例程序-一个简单的聊天室
查看>>
Java类查找
查看>>
C里面的运算符优先级关系表
查看>>
Dubbo服务注册再回顾,流程数据一览
查看>>
PostgreSQL text类型短数据存储说明
查看>>
Hadoop1.2.1分布式安装-1-准备篇
查看>>
在ubuntu 12.04中安装最新的 VLC 2.0.1多媒体播放软件
查看>>
SUSE vsftp 无法登陆问题
查看>>
Elasticsearch 5.0-安装使用
查看>>
结构型模式
查看>>
在图片上用热点(map area)做弹出层(tips)
查看>>
java基础——异常
查看>>
面向接口编程之提炼接口(Objective-C )
查看>>
用maven+springMVC创建一个项目
查看>>
linux设备驱动第四篇:以oops信息定位代码行为例谈驱动调试方法
查看>>